<?php
/**
* User 클래스 정의
* @since 2006-10-18
* @update 2007-07-18
* @version 1.1.0
* @author hamhaja <hamhaja@nextez.co.kr>
*/
if (!class_exists("User"))
{
	class User
	{
		var $_levels;

		var $_super_admin_level;
		var $_admin_level;
		var $_site_admin_level;
		var $_notlogin_level;
		var $_login_level;

		var $_session_name;
		var $_default_level;
		var $_default_id;
		var $_default_name;
		var $_default_group;
		var $_super_admin_id;

		var $_id;
		var $_level;
		var $_name;
		var $_count;
		var $_groups;

		/**
		* PHP 5 Constructor
		*/
		function __construct()
		{
			global $App;
			$this->_levels = array(
				99	=> '회원',
				50	=> '사이트관리자',
				//25  => '일반관리자',
				1	=> '관리자',
			);

			$this->_super_admin_level	= 1;
			$this->_admin_level			= 25;
			$this->_site_admin_level	= 50;
			$this->_notlogin_level		= 100;
			$this->_login_level			= 99;

			$this->_session_name	= $App->_session_name;
			$this->_default_level	= 100;
			$this->_default_id		= 'guest';
			$this->_default_name	= '방문객';
			$this->_default_group	= '';
			$this->_super_admin_id	= 'admin';

			$this->_id		= false;
			$this->_level	= false;
			$this->_name	= false;
			$this->_count	= 0;
			$this->_groups	= false;

			//session_set_cookie_params(0, '/', ".{$_SERVER['HTTP_HOST']}");
			session_set_cookie_params(0, '/', ".{$App->_session_domain}");
			ini_set('session.cache_limiter','nocache, must-revalidate-revalidate');
			session_start();

			$this->_set();
		}

		/**
		* PHP 4 Constructor
		*/
		function User()
		{
			$this->__construct();
		}

		/**
		* 넘겨진 레벨에 해당하는 레벨 문자열 정보를 반환한다.
		* @param integer $level 레벨
		* @return string 레벨 문자열 정보
		* @version 1.0.0
		*/
		function get_level_name($level)
		{
			if (array_key_exists($level, $this->_levels)) return $this->_levels[$level];
			else return '알수없음';
		}

		/**
		* 넘겨진 그룹아이디에 해당하는 그룹명 목록을 반환합니다.
		* @param array $ids 그룹아이디 목록
		* @return array 그룹명목록
		* @version 1.1.0
		*/
		function group_names($ids)
		{
			global $App, $Db;
			$App->class_require('Table.Membergrp');
			$Membergrp = new Membergrp(&$Db);
			$list = array();

			foreach ($ids as $id)
				$list[$id] = $Membergrp->get_a_value('mg_name', array($id));

			return $list;
		}

		/**
		* 로그인여부를 반환한다.
		* @return boolean 로그인상태이면 TRUE
		* @version 1.0.0
		*/
		function is_login()
		{
			if (!$this->_level) return false;
			return true;
			return ($this->_level <= $this->_login_level);
		}

		/**
		* 관리자여부를 반환한다.
		* @return boolean 관리자이면 TRUE
		* @version 1.0.0
		*/
		function is_admin()
		{
			if (!$this->_level) return false;
			return ($this->_level <= $this->_admin_level);
		}

		/**
		* 사이트관리자인지 체크합니다.
		* @return boolean 사이트관리자이면 TRUE
		* @version 1.1.0
		*/
		function is_site_admin()
		{
			if (!$this->_level) return false;
			return ($this->_level <= $this->_site_admin_level);
		}

		/**
		* 최고관리자여부를 반환한다.
		* @return boolean 최고관리자이면 TRUE
		* @version 1.0.0
		*/
		function is_super_admin()
		{
			if (!$this->_level) return false;
			return ($this->_level <= $this->_super_admin_level);
		}

		/**
		* 넘겨진 그룹의 사용자인지 체크한다.
		* @param string $group_id 그룹아이디
		* @return boolean 그룹내의 사용자이면 TRUE
		* @version 1.0.0
		*/
		function is_group($group_id)
		{
			if (!$this->_level) return false;
			$groups = explode(',', $this->_groups);
			return in_array($group_id, $groups);
		}

		/**
		* 넘겨진 아이디에 해당하는 사용자 정보를 세션에 등록합니다.
		* @param string $id 회원아이디
		* @return boolean 등록에 성공하면 TRUE
		* @version 1.0.0
		*/
		function register($id, $regno=null)
		{
			global $App, $Db;
			$App->class_require('Table.Member');
			$Member = new Member(&$Db);

			if(empty($regno))
			{
				if ($record = $Member->get_a_record('', array($id)))
				{
					$_SESSION[$this->_session_name] = array(
						'id'		=> $record['mb_id'],
						'name'		=> $record['mb_name'],
						'level'		=> $record['mb_level'],
					//	'groups'	=> implode(',', $MemberGroup->group_list($id)),
						'count'		=> $record['mb_cnt'],
					);
					$this->_set();
					return true;
				}
			}
			else
			{
				$App->class_require('Table.PmsHomepageMember');
				$PmsHomepageMember = new PmsHomepageMember(&$Db);

				if ($record = $PmsHomepageMember->get_a_record('', array($id,$regno)))
				{
					$_SESSION[$this->_session_name] = array(
						'id'		=> $record['ha_id'],
						'name'		=> $record['ha_name'],
						'level'		=> '50'
					);


					$this->_set();
					return true;
				}

			}
			return false;
		}

		/**
		* 넘겨진 아이디에 해당하는 사용자 체크
		* @param string $id 회원아이디
		* @return boolean 등록에 성공하면 TRUE
		* @version 1.0.0
		*/
		function check_id($id)
		{
			global $App, $Db;
			$App->class_require('Table.Member');
			$Member = new Member(&$Db);
			//$Member = new Member($Db);

			$record = $Member->get_a_record('', array($id));
			if ($record) return true;
			return false;
		}

		/**
		* 쿠키에 저장된 아이디를 삭제합니다.
		* @version 1.2.0
		*/
		function remove_id()
		{
			$expire = mktime(0, 0, 0, 12, 31, date('Y') - 10);
			//setcookie('SAVE_ID', $id, $expire, '/', ".{$App->_session_domain}");
			setcookie('SAVE_ID', '', $expire, '/', ".{$App->_session_domain}");
		}

		/**
		* 넘겨진 아이디를 쿠키에 저장합니다.
		* @param string $id 아이디
		* @version 1.2.0
		*/
		function save_id($id)
		{
			$expire = mktime(0, 0, 0, 12, 31, date('Y') + 10);
			setcookie('SAVE_ID', $id, $expire, '/', ".{$App->_session_domain}");
		}

		/**
		* 세션과 멤버변수의 값을 초기화 한다.
		* @version 1.0.0
		*/
		function unregister()
		{
			$this->_id		= false;
			$this->_level	= false;
			$this->_name	= false;
			$this->_groups	= false;
			session_unregister("{$this->_session_name}");
		}

		/** Getter ***/
		function get_id() { return $this->_id; }
		function get_level() { return $this->_level; }
		function get_levels() { return $this->_levels; }
		function get_name() { return $this->_name; }
		function get_count() { return $this->_count; }
		function get_groups() { return $this->_groups; }
		function get_default_id() { return $this->_default_id; }
		function get_default_level() { return $this->_default_level; }
		function get_default_name() { return$this->_default_name; }
		function get_login_level() { return$this->_login_level; }

		/** Setter **/
		function _set()
		{
			if (isset($_SESSION[$this->_session_name]))
			{
				$this->_id = $_SESSION[$this->_session_name]['id'];
				$this->_level = $_SESSION[$this->_session_name]['level'];
				$this->_name = $_SESSION[$this->_session_name]['name'];
				$this->_count = $_SESSION[$this->_session_name]['count'];
				$this->_groups = $_SESSION[$this->_session_name]['groups'];
			}
		}
	}
}